package com.sky.config;

import com.qiniu.storage.Region;
import com.sky.properties.QnyOssProperties;
import com.sky.utils.QnyOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@Slf4j
public class QnyConfiguration {
    @Bean
    @ConditionalOnMissingBean//当容器里没有这个bean时，才创建这个bean
    public QnyOssUtil qnyOssUtil(QnyOssProperties qnyOssProperties) {
        log.info("开始创建七牛云文件上传工具类对象：{}", qnyOssProperties);
        Region region = convertToRegion(qnyOssProperties.getRegion()); // 转换为 Region 对象
        return new QnyOssUtil(qnyOssProperties.getAccessKey(),
                qnyOssProperties.getSecretKey(),
                qnyOssProperties.getBucket(),
                qnyOssProperties.getDomain(),
                region,
                qnyOssProperties.getPath());
    }

    /**
     * 根据官网规则，将字符串转换为七牛云 Region 对象
     * 支持两种格式：region0/huadong、region1/huabei 等
     */
    private Region convertToRegion(String regionStr) {
        try {
            // 避免空指针和空字符串
            if (regionStr == null || regionStr.trim().isEmpty()) {
                log.error("七牛云区域不能为空，使用默认区域：华东");
                return Region.region0();
            }
            // 统一转小写，忽略大小写差异
            String lowerCaseRegion = regionStr.trim().toLowerCase();
            switch (lowerCaseRegion) {
                // 华东：支持 region0 或 huadong
                case "region0":
                case "huadong":
                    return Region.region0();
                // 华北：支持 region1 或 huabei
                case "region1":
                case "huabei":
                    return Region.region1();
                // 华南：支持 region2 或 huanan
                case "region2":
                case "huanan":
                    return Region.region2();
                // 北美：支持 regionna0 或 beimei
                case "regionna0":
                case "beimei":
                    return Region.regionNa0();
                // 东南亚：支持 regionas0 或 xinjiapo
                case "regionas0":
                case "xinjiapo":
                    return Region.regionAs0();
                // 其他情况使用默认区域
                default:
                    log.error("无效的七牛云区域：{}，使用默认区域：华东", regionStr);
                    return Region.region0();
            }
        } catch (Exception e) {
            // 兜底逻辑：任何异常都返回默认区域
            log.error("区域转换失败，使用默认区域：华东", e);
            return Region.region0();
        }
    }
}
